function ajax(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.responseType = "json";
    xhr.onload = function () {
      if (this.status === 200) {
        resolve(this.response);
      } else {
        reject(this.statusText);
      }
    };
    xhr.send();
  });
}

// Promise.all(arr): 接收一个promise的数组，只有这个数组的所有promise都成功之后，这个Promise.all才会被执行
/* ajax("./api/urls.json")
.then((val) => {
  const urls = Object.values(val);
  const tasks = urls.map((url) => ajax(url));
  return Promise.all(tasks);
  })
  .then((val) => {
    console.log(val);
    }); */

// Promise.race(arr): 接收一个promise的数组，只要这个数组中有一个promise成功后，这个Promise.race就会被执行
// 网络请求超时处理
const request = ajax("./api/posts.json");
const timeout = new Promise((resolve, reject) => {
  setTimeout(() => reject(new Error("timeout")), 500);
});

Promise.race([request, timeout])
  .then((val) => console.log(val))
  .catch((err) => console.log(err));
